package org.example;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA {

    // 该方法接受一个字符串，返回其SHA-256散列值的十六进制字符串表示
    public static String sha256(String input) {
        try {
            // 获取SHA-256散列算法的实例
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            // 对输入字符串进行更新（提供要散列的数据）
            md.update(input.getBytes());
            // 进行散列计算并获取结果
            byte[] digest = md.digest();
            // 将散列值的字节数组转换为十六进制字符串
            return bytesToHex(digest);
        } catch (NoSuchAlgorithmException e) {
            // 如果找不到SHA-256算法，将异常转换为运行时异常并抛出
            throw new RuntimeException("SHA-256 algorithm not found", e);
        }
    }

    // 私有静态方法，将字节数组转换为十六进制表示的字符串
    private static String bytesToHex(byte[] bytes) {
        // 创建一个字符串构建器用于构建十六进制字符串
        StringBuilder sb = new StringBuilder();
        // 遍历字节数组
        for (byte b : bytes) {
            // 将每个字节转换为两位的十六进制字符串，并追加到构建器中
            sb.append(String.format("%02x", b));
        }
        // 将构建器转换成字符串并返回
        return sb.toString();
    }

    // 主方法，程序的入口点
    public static void main(String[] args) {
        // 定义一个原始字符串
        String originalString = "马军";
        // 调用sha256方法计算字符串的SHA-256散列值
        String hashedString = sha256(originalString);
        // 打印原始字符串
        System.out.println("Original: " + originalString);
        // 打印散列后的字符串
        System.out.println("SHA-256 Hashed: " + hashedString);
    }

}
